//1.引入模块
var userModel = require("../models/usersModel.js")
var querystring = require("querystring")
var path = require("path")
var fs = require("fs")

//向外暴露
module.exports = {// 创建渲染首页的方法
    showUsersPage(req, res) {
        //开启session验证
        // if (!req.session.isLogin) { // 如果无session
        //     res.redirect("/login") // 跳转到登录页面
        //     return
        // }

        // 从操作数据模块models中获取所有英雄数据
        userModel.getAllUsers((err,data)=>{
            if(err) return console.log(err.message)
            // 调用渲染方法
            res.render("users", { list: data, isLogin: req.session.isLogin}); // 参数一是渲染的路径, 参数二是渲染的数据
        }) 
    },
    userAdd(req,res){ // 添加用户的方法
        // 通过引入body-parse模块即可通过req.body获取post请求发送的数据
        var user = req.body; // 获取添加的用户数据
        user.status = "activated"; // 给要新用户添加其他数据
        user.avatar = "/uploads/avatar.jpg"; // 给要新用户添加其他数据

        // 调用数据层添加用户数据的方法
        userModel.userAdd(user,(err,isOK)=>{
            
            if(err) return res.end("404")
            //根据返回结果重新读取所有用户数据
            // console.log(isOK + "有数据返回1")
            if (isOK){
                // console.log(isOK + "有数据返回2")
                //调用数据层读取用户数据的方法
                userModel.getAllUsers((err,data)=>{
                    if(err) return res.end("404")
                    //读取成功返回状态码 和 状态描述 及读取到的数据
                    // var obj = {
                    //     "code":1,
                    //     "msg":"添加用户成功",
                    //     "data":data
                    // }
                    // //把数据转为字符串形式返回前端
                    // res.end(JSON.stringify(obj));
                    res.json({
                        "code":1,
                        "msg":"添加成功",
                        "data":data
                    })
                })
            }
        })
    },
    userDel(req,res){
        //获取请求的路径,通过querystring.parse()指定界定符,转为对象形式
        var url = querystring.parse(req.url,"?","=",true)
        var id = url.id ; // 获取请求路径的id值
        //调用数据层删除数据方法
        userModel.userDel(id,(err,isOK)=>{
            if(err) return res.end("404")
            if(isOK){
                userModel.getAllUsers((err,data)=>{
                    if(err) return res.end("404")
                    //根据返回的结果,输出响应码,状态描述 和数据
                    var obj = {
                        "code":1,
                        "msg":"删除成功",
                        "data":data
                    }
                    //转为字符串数据返回前端
                    res.end(JSON.stringify(obj))
                })
            }else{
                var obj = {
                    "code":1,
                    "msg": "删除失败"
                }
                res.end(JSON.stringify(obj))
            }
        })
    },
    showUserInfoById(req,res){
        //获取请求地址
        var url = querystring.parse(req.url,"?","=",true)
        //获取地址中的id值
        var id = url.id;
        // console.log(id)
        //调用数据层模块根据id查询相应的数据
        userModel.showUserInfoById(id,(err,data)=>{
            // console.log("查询数据成功")
            if(err) return res.json({
                "code": 1,
                "msg": "查询失败"
            })
            res.json({
                "code":0,
                "msg":"查询成功",
                "data": data
            })
        })
    },
    updateUserInfoById(req,res){
        //获取请求的数据
        var user = req.body
        userModel.updateUserInfoById(user,(err,isOK)=>{
            if(err) return res.json({
                "code":1,
                "msg":"更新失败"
            })
             //如果更新成功,重新读取更新后的数据渲染页面
            if(isOK){
                userModel.getAllUsers((err,data)=>{
                    if(err) return res.json({
                        "code":1,
                        "msg": "更新成功,读取失败"
                    })
                    res.json({
                        "code":0,
                        "msg": "更新成功,读取成功",
                        "data":data
                    })
                })
            }
        })
    },
    delMoreUsersByIds(req,res){
        //接收传递的ids数据
        var ids = req.body["ids[]"];
        //调用批量删除用户的方法
        userModel.delMoreUsersByIds(ids,(err,isOK)=>{
            if (err) res.json({
                "code": 1,
                "msg": "删除失败"
            })
            if (isOK) {
                // 查询剩余的用户,返回给前端页面
                userModel.getAllUsers((err, users) => {
                    if (err) res.json({
                        "code": 1,
                        "msg": "删除数据成功后查询数据时出错"
                    })

                    res.json({
                        "code": 0,
                        "msg": "查询用户成功",
                        "data": users
                    })
                })
            }
        })
    },
    showLoginPage(req,res){ // 展示登录页面
        res.render("login",{})
    },
    userloginByEmailAndPassword(req,res){ //登录业务
        //获取post请求的数据
        var user = req.body // 接收登录邮箱和密码
        // console.log(user)
        //调动数据层业务校验用户信息
        userModel.userloginByEmailAndPassword(user,(err,data)=>{
            if(err) return res.json({
                "code":1,
                "msg":"登录失败"
            })
            //校验成功,则设置session
            req.session.isLogin = true;
            req.session.user = data;  // 把查询到的当前用户信息存在session中
            res.json({
                "code":0,
                "msg":"登录成功"
            })
        })
    },
    userLogout(req,res){ // 退出登录
        req.session.destroy((err)=>{ // 销毁session
            if(err) return console.log(err.message)
            res.redirect("/login") // 跳转到登录页
        })
    },
    showProfilePage(req,res){ // 展示个人中心
        //校验session
        if (!req.session.isLogin || !req.session.user){ // 无session或未登陆
            res.redirect("/login") // 跳转到登录页
            return
        }
        // console.log(req.session.user)
        //如果有session,则从session中读取用户的id,查询后台数据
        var {id} = req.session.user; // 解构赋值
        userModel.getProfileInfoById(id, (err, profileInfo)=>{
            if(err) return res.redirect("/index",{}) //查询失败,返回登录页
            // 查询成功,则根据读取的数据,渲染个人中心页面
            res.render("profile", { profileInfo: profileInfo,isLogin:req.session.isLogin})
        })
    },
    updateFile(req,res){
        //获取到传输的数据
        var { path:pathTmp, filename, originalname} = req.file
        //提交数据目标路径
        var imgName = path.join(__dirname, "../uploads/") + filename + originalname;
        fs.readFile(pathTmp, (err, data) => {
            if (err) return res.json({
                "code": 1,
                "msg": "读取失败"
            })

            fs.writeFile(imgName, data, (err) => {
                if (err) return res.json({
                    "code": 1,
                    "msg": "上传失败"
                })
                // 还应该返回图片在服务器端的路径
                var src = "/uploads/" + filename + originalname;
                res.json({
                    "code": 0,
                    "msg": "上传成功",
                    "src": src
                })
            })
        })
    },
    updateProfileInfoById(req,res){
        // 获取传输的个人中心数据
        var profileInfo = req.body; // 获取post传输的数据对象
        userModel.updateProfileInfoById(profileInfo,(err,isOK)=>{
            if (err) return res.json({
                "code": 1,
                "msg": "更新失败"
            })

            res.json({
                "code": 0,
                "msg": "更新成功"
            })
        })
    }


}